package com.jt.security.controller;

import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * 可以将这里的Controller看成是系统内部的一个资源对象,我们
 * 要求访问此对象中的方法时需要进行权限检查
 *
 * */
@RestController
public class ResourceConroller {
    /*添加操作, @PreAuthorize注解由SpringSecurity提供,用于描述方法,
    * 此注解描述方法以后,再访问方法首先要进行权限检测*/
    //@PreAuthorize("hasRole('normal')")//假如登录用具备admin这个角色可以访问
    //登录用户需要具备sys:res:create权限才可访问资源
    @PreAuthorize("hasAuthority('sys:res:create')")//需要添加权限
    @RequestMapping("/doCreate")
    public String doCreate(){
        return "Create resource OK";
    }
    /**更新操作*/
    @PreAuthorize("hasAuthority('sys:res:update')")//需要修改权限
    @RequestMapping("doUpdate")
    public String doUpdate(){
        return "update resource OK";
    }
    /**查询操作*/
    @PreAuthorize("hasAuthority('sys:res:retrieve')")//需要查询权限
    @RequestMapping("/doRetrieve")
    public String doRetrieve(){
        return "retrieve resource OK";
    }
    /**删除操作*/
    @PreAuthorize("hasAuthority('sys:res:delete')")//需要删除权限
    @RequestMapping("/doDelete")
    public String doDelete(){
        return "Delete resource OK";
    }

    /**
     * 获取登录用户信息
     * 1.用户登录成功以后信息都存储到了哪里?
     * 2.如何获取用户信息
     * */
    @GetMapping("/doGetUser")
    public String doGetUser(){
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        User principal = (User)authentication.getPrincipal();
        System.out.println("principal.class=+"+principal.getClass());

        return principal.getUsername()+""+principal.getAuthorities();
    }











}
